﻿Imports Commander_Wars.Spieletools
Imports Microsoft.DirectX.Direct3D
Imports Microsoft.DirectX
''' <summary>
''' Erstellt einen vom Spieler erstellten KO.
''' </summary>
''' <remarks></remarks>
Public Class KOCustom
    Inherits ObjektKO
    Public Enum KOScipts
        GegnerKampf
        Geldeinnehmen
        BesetzungsRestart
        HalbesGeld
        HalbesEinkommen
        KeinEinkommen
        NeutralMachen
        NeutralesGeld
        Massenschaden
        MassenschadenLaehmung
        Gebaeudeerschaffen
        GebaeudeNochmalSchiessen
        StadtUebernehmen
        gelderhoehen
        Ration
        Wetteraendern
        Rakete
        HeilenKOZone
        TreibMuniStehlen
        NochmalZiehen
        StadtBauen
        HoehereBewegungskosten
        Zusatzangriffe
        Schock
        Invasion
        KeinTruppenbau
        KeineRation
        AndereDeckung
        Gabenraub
        Fallschrimspringer
        Besetzungsniedergang
        Geldheilung
        Lebensabrundung
        KeinTPSehungEigene
        KeinTPSehungFeinde
        KeinAngriffausserInfanterie
        KeinGabeeinsatz
        ActivateKriegsnebel
        SetEnemyVisionRange
        SetEnemyLuckAndCurse
        KeinGabeleisteAuffuellung
        WenigerEinahmendurchBesetzungszahl
        EinheitenSchadensWelle
    End Enum
    Dim CustomID As Integer
    Public KOWerte(2) As Power
    Public Sub New()
        MyBase.New(0, KIGabeEinsatzstellen.RundenAnfang)
    End Sub
    Public Sub New(ByVal Spieler As Integer, ByVal KOID As Integer)
        MyBase.New(Spieler, KIGabeEinsatzstellen.RundenAnfang)
        StartwerteLaden(KOID)
    End Sub
    Public Sub New(ByVal Spieler As Integer, ByVal Gabefuellstand As Integer, ByVal Gabenart As Gabemodi, ByVal neuSternkosten As Integer, ByVal KOID As Integer)
        MyBase.New(Spieler, Gabefuellstand, Gabenart, neuSternkosten, KIGabeEinsatzstellen.RundenAnfang)
        StartwerteLaden(KOID)
    End Sub
    Public Sub StartwerteLaden(ByVal CustomID As Integer)
        Me.CustomID = CustomID
        KOID = Objektverwalter.CustomKOS(CustomID).KOID
        Bild = GetBildID()
        Armee = Objektverwalter.CustomKOS(CustomID).Armee
        Musik = Objektverwalter.CustomKOS(CustomID).Musik
        Me.Gabemusik = Objektverwalter.CustomKOS(CustomID).Gabemusik
        Me.Spezialgabemusik = Objektverwalter.CustomKOS(CustomID).Spezialgabemusik
        Me.Doppelgabemusik = Objektverwalter.CustomKOS(CustomID).Doppelgabemusik
        KOname = Objektverwalter.CustomKOS(CustomID).KOname
        Select Case DataSettings.CommanderWarsGameModus
            Case CommanderWarsGameModi.AdvanceWars
                Sternkosten = Objektverwalter.CustomKOS(CustomID).Sternkosten
                Gabekosten = 0
                If Objektverwalter.GetKO(Bild).KOBeschreibung.Spezialgabekosten > 0 Then
                    SpezialgabeKosten = 4
                Else
                    SpezialgabeKosten = 0
                End If
                Gaben = Objektverwalter.GetKO(Bild).KOBeschreibung.Gaben
                Gaben(1) = Gaben(0)
            Case CommanderWarsGameModi.AdvanceWarsDC
                Sternkosten = 1000
                Gabekosten = 0
                If Objektverwalter.GetKO(Bild).KOBeschreibung.Spezialgabekosten > 0 Then
                    SpezialgabeKosten = 6
                Else
                    SpezialgabeKosten = 0
                End If
                Gaben = Objektverwalter.GetKO(Bild).KOBeschreibung.Gaben
            Case Else
                Sternkosten = Objektverwalter.CustomKOS(CustomID).Sternkosten
                Gabekosten = Objektverwalter.GetKO(Bild).KOBeschreibung.GabeKosten
                SpezialgabeKosten = Objektverwalter.GetKO(Bild).KOBeschreibung.Spezialgabekosten
                Gaben = Objektverwalter.CustomKOS(CustomID).Gaben
        End Select
        KORange = Objektverwalter.CustomKOS(CustomID).KORange
        'Gaben und so laden
        KOWerte = Objektverwalter.CustomKOS(CustomID).KOWerte

        KOLaden()
    End Sub
    ''' <summary>
    ''' Wir laden einen neuen KO.
    ''' </summary>
    ''' <param name="KOFile"></param>
    ''' <remarks></remarks>
    Public Sub StartwerteLaden(ByVal KOFile As String)
        Using Reader As New IO.StreamReader(KOFile, Hauptmenue.Codierung, True)
            'Na dann laden wir denn KO mal
            While Not Reader.EndOfStream
                Dim Z As String = Reader.ReadLine.Trim
                If Z.StartsWith("'") Then Continue While
                'Hier lesen wir ein paar Standardwerte aus.

                If Z.ToLower.StartsWith("koname:") Then
                    KOname = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("koid:") Then
                    KOID = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("armee:") Then
                    Armee = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("musik:") Then
                    Musik = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabemusik:") Then
                    Gabemusik = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("spezialgabemusik:") Then
                    Spezialgabemusik = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("doppelgabemusik:") Then
                    Doppelgabemusik = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("sternkosten:") Then
                    Sternkosten = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabekosten:") Then
                    Gabekosten = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("spezialgabeKosten:") Then
                    SpezialgabeKosten = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabenamen:") Then
                    Gaben = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("korange:") Then
                    KORange = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                'Jetzt die Normallen Faehigkeiten und Gaben
                If Z.ToLower.StartsWith("daytoday") Then
                    KOWerte(0) = New Power(Reader)
                    Continue While
                End If
                If Z.ToLower.StartsWith("copower") Then
                    KOWerte(1) = New Power(Reader)
                    Continue While
                End If
                If Z.ToLower.StartsWith("specialpower") Then
                    KOWerte(2) = New Power(Reader)
                    Continue While
                End If
            End While
        End Using

    End Sub
    Public Overrides Sub KOLaden()
        If KOWerte(0) IsNot Nothing Then
            KOWerte(0).ActivatePower(Me)
        End If
        If DataSettings.CommanderWarsGameModus = CommanderWarsGameModi.AdvanceWarsDC Then
            'Dafuer sinkt die Feuerkraft aber drastisch
            If WetterReichweitenbonus(0) = -1 Then
                WetterReichweitenbonus(0) = 0
            End If
        End If
    End Sub
    Public Overrides Sub Gabeeinsetzen(Optional ByVal OhneFunktion As Boolean = False)
        If KOWerte(1) IsNot Nothing Then
            KOWerte(1).ActivatePower(Me)
            If Not OhneFunktion Then
                KOWerte(1).ActivateEffect(Me)
            End If
        End If
        GabeEingesetzt()
    End Sub
    Public Overrides Sub SpezialGabeeinsetzen(Optional ByVal OhneFunktion As Boolean = False)
        If DataSettings.CommanderWarsGameModus = CommanderWarsGameModi.AdvanceWars Then
            If KOWerte(1) IsNot Nothing Then
                KOWerte(1).ActivatePower(Me)
                If Not OhneFunktion Then
                    KOWerte(1).ActivateEffect(Me)
                End If
            End If
        ElseIf KOWerte(2) IsNot Nothing Then

            KOWerte(2).ActivatePower(Me)
            If Not OhneFunktion Then
                KOWerte(2).ActivateEffect(Me)
            End If
        End If
        GabeEingesetzt()
    End Sub
    Public Overrides Sub KOFrame()
        If KOWerte(0) IsNot Nothing Then
            Select Case Objektverwalter.Spielfeld.CommanderWarsModus
                Case CommanderWarsGameModi.CommanderWars2, CommanderWarsGameModi.AdvanceWarsDC
                    If GetKOUnit() IsNot Nothing Then
                        KOWerte(0).ActivateEffect(Me)
                    End If
                Case Else
                    KOWerte(0).ActivateEffect(Me)
            End Select

        End If
    End Sub
    ''' <summary>
    ''' Diese Klasse wird benutzt um die KO-Gabe einzusetzen.
    ''' </summary>
    ''' <remarks></remarks>
    Public Class Power
#Region "KOFaehigkeiten"
        ''' <summary>
        ''' So viel teurer werden Einheiten
        ''' </summary>
        ''' <remarks></remarks>
        Public Teurungsrate As Single = 1
        ''' <summary>
        ''' Um so viel werden Truppen auf Gebaeuden geheilt
        ''' </summary>
        ''' <remarks></remarks>
        Public GebaeudeHeilung As Integer = 2
        ''' <summary>
        ''' So viel koennen Fernwaffen weiter schiessen.
        ''' </summary>
        ''' <remarks></remarks>
        Public Reichweite As Integer = 0
        ''' <summary>
        ''' Bonus zum Besetzen von Gebaeuden
        ''' </summary>
        ''' <remarks></remarks>
        Public Besetzer As Single = 0
        ''' <summary>
        ''' Das Glueck des KO's
        ''' </summary>
        ''' <remarks></remarks>
        Public Glueck As Integer = 5
        ''' <summary>
        ''' Das Pech des KO's
        ''' </summary>
        ''' <remarks></remarks>
        Public Pech As Integer = 0
        ''' <summary>
        ''' Geld welches man pro Stadt mehr bekommt
        ''' </summary>
        ''' <remarks></remarks>
        Public BonusGeldproGebaeude As Integer = 0
        ''' <summary>
        ''' Senkung der Treibstoffkosten in der Luft
        ''' </summary>
        ''' <remarks></remarks>
        Public SpritsenkungLuft As Integer = 0
        ''' <summary>
        ''' Senkung der Treibstoffkosten auf See
        ''' </summary>
        ''' <remarks></remarks>
        Public SpritsenkungSee As Integer = 0
        ''' <summary>
        ''' Um wie viel die Feuerkraft steigt je nach Landschaftsuntergrund
        ''' </summary>
        ''' <remarks></remarks>
        Public LandschaftsStaerke As Integer = 0
        ''' <summary>
        ''' Eine TerrainID oder "Deckung" erhoeht die Feuerkraft je nach LandschaftsStaerke
        ''' </summary>
        ''' <remarks></remarks>
        Public LandschaftsUntergrund() As String = {}
        ''' <summary>
        ''' Feuerstaerke aller Truppen.
        ''' </summary>
        ''' <remarks></remarks>
        Public OffensivStaerke As ObjektTabelle = New FeuerkrafttabelleCustomAlles(100)
        ''' <summary>
        ''' Deffensive Staerke aller Truppen.
        ''' </summary>
        ''' <remarks></remarks>
        Public DeffensivStaerke As ObjektTabelle = New FeuerkrafttabelleCustomAlles(100)
        ''' <summary>
        ''' Wenn true dann werden KP und Ladung versteckt
        ''' </summary>
        ''' <remarks></remarks>
        Public Verstecker As Boolean = False
        ''' <summary>
        ''' Um so viel wird die ATK bei einem Wetter erhoeht
        ''' </summary>
        ''' <remarks></remarks>
        Public Wetterbouns As Integer = 0
        ''' <summary>
        ''' Bei diesem Wetter wird die ATK erhoeht um Wetterbonus
        ''' </summary>
        ''' <remarks></remarks>
        Public Wetter As ObjektSpielfeld.Wetterarten = ObjektSpielfeld.Wetterarten.Sonne
        ''' <summary>
        ''' Bei diesem Wetter aendern sich die Bewegungspunkte
        ''' </summary>
        ''' <remarks></remarks>
        Public Bewegunssenker() As ObjektSpielfeld.Wetterarten = {}
        ''' <summary>
        ''' Auf diesen Wert werden die Bewegungspunkte gesetzt
        ''' </summary>
        ''' <remarks></remarks>
        Public Bewegungswetter() As Bewegungsarten = {}
        ''' <summary>
        ''' Um wie viel die Reichweite bei bestimmten Wetterarten sich aendern
        ''' </summary>
        ''' <remarks></remarks>
        Public WetterReichweitenbonus() As Integer = {-1}
        ''' <summary>
        ''' Bei welchem Wetter die Reichweitenaenderung stattfindet.
        ''' </summary>
        ''' <remarks></remarks>
        Public WetterartfuerSenker() As ObjektSpielfeld.Wetterarten = {ObjektSpielfeld.Wetterarten.Sandsturm}
        ''' <summary>
        ''' Der Boost pro Sende Turm
        ''' </summary>
        ''' <remarks></remarks>
        Public SendeTurmStaerke As Point = New Point(10, 0)
        ''' <summary>
        ''' Zusatzdeffensive bei Direkt und Indirekten Angriffen
        ''' </summary>
        ''' <remarks></remarks>
        Public Zusatzdeffensive As New Point
        ''' <summary>
        ''' Wie schnell sich die Gabeleiste auffuellt
        ''' </summary>
        ''' <remarks></remarks>
        Public Gabenfueller As Single = 1
        ''' <summary>
        ''' Fuer so viel Fonds steigt die Feuerkraft
        ''' </summary>
        ''' <remarks></remarks>
        Public Geldstaerke As Integer = -10
        ''' <summary>
        ''' Klaut dem Gegner Fonds fuer jeden Angriff
        ''' </summary>
        ''' <remarks></remarks>
        Public Geldraub As Single = -1
        ''' <summary>
        ''' Deckungsaenderung pro Stern
        ''' </summary>
        ''' <remarks></remarks>
        Public DeckungsAenderung As Integer = 1
        ''' <summary>
        ''' Offensiv Erhoehung fuer Nah-und Fernkaempfer
        ''' </summary>
        ''' <remarks></remarks>
        Public Zusatzoffensive As New Point
        ''' <summary>
        ''' Sichtbonus fuer alle Einheiten
        ''' </summary>
        ''' <remarks></remarks>
        Public Sichtbonus As Integer = 0
        ''' <summary>
        ''' Wenn groesser Null fuehren wir einen zweiten Angriff mit n-facher Staerke des Startangriffes aus.
        ''' </summary>
        ''' <remarks></remarks>
        Public DoppelAngriff As Single = 0
        ''' <summary>
        ''' Wir nehmen keinen Gegenschaden.
        ''' </summary>
        ''' <remarks></remarks>
        Public KeinGegenSchaden As Boolean = False
        ''' <summary>
        ''' Fernwaffen koennen ziehen und feuern.
        ''' </summary>
        ''' <remarks></remarks>
        Public MoveandFire As Boolean = False
        ''' <summary>
        ''' Bonus fuer Truppen die sich mehr bewegen koennen.
        ''' </summary>
        ''' <remarks></remarks>
        Public Bewegungsbonus As BewegungsboniTabelle = New BewegungsboniTabelleCustomAlles(0)
        ''' <summary>
        ''' Bonus fuer Truppen wenn feinde gesehen werden usw.
        ''' </summary>
        ''' <remarks></remarks>
        Public Kampfbonus As Kampfboni = Kampfboni.No
        ''' <summary>
        ''' Bonus pro Truppe die den Kampfbonus erfuellt.
        ''' </summary>
        ''' <remarks></remarks>
        Public StaerkebonusproEinheit As Integer = 0
        ''' <summary>
        ''' Truppen haben KP+Kampfverstaerker Angriffskraft.
        ''' </summary>
        ''' <remarks></remarks>
        Public Kampfverstaerker As Integer = 0
        ''' <summary>
        ''' Wenn groesser Null kann man nur noch einen N-Ten Bruchteil des Lebens abziehen.
        ''' </summary>
        ''' <remarks></remarks>
        Public Maximalschaden As Single = -1
        ''' <summary>
        ''' Fernwaffen koennen Feuern und ziehen
        ''' </summary>
        ''' <remarks></remarks>
        Public FireandMove As Boolean = False
        ''' <summary>
        ''' Mit dieser Zahl wird der KOnterschaden multipliziert
        ''' </summary>
        ''' <remarks></remarks>
        Public GegenFeuerkraft As Single = 1
        ''' <summary>
        ''' Wenn groesser Null entzieht man dem Gegner Leben
        ''' </summary>
        ''' <remarks></remarks>
        Public Lebensentzug As Single = 0
        ''' <summary>
        ''' Wenn true kann man auch die Komma Zahl des Lebens sehen
        ''' </summary>
        ''' <remarks></remarks>
        Public GenauesLebenAnzeigen As Boolean = False
        ''' <summary>
        ''' Einheiten koennen nach ihrem Bau ziehen.
        ''' </summary>
        ''' <remarks></remarks>
        Public NachBauZiehen As Boolean = False
        ''' <summary>
        ''' Der erste Punkt bedeutet die Feuerkraftsteigerung, wenn Gruppen von X Einheiten oder mehr Angegriffen werden und eine Steigerung um Y.
        ''' Der zweite Punkt bedeutet die Feuerkraftsteigerung, wenn Gruppen von X Einheiten oder weniger Angegriffen werden und eine Feuerkraftsteigerung um Y.
        ''' Der Radius sind immer 3 Felder.
        ''' </summary>
        ''' <remarks></remarks>
        Public GruppenBoost As Point() = {New Point(0, 0), New Point(0, 0)}
        ''' <summary>
        ''' X=ATK Steigerung Y Radius wie weit man vom Berg weg sein darf, kann
        ''' </summary>
        ''' <remarks></remarks>
        Public Bergbonus As Point = New Point(0, 0)
        ''' <summary>
        ''' Wenn wir Schaden nehmen bekommen wir etwas Geld zurueck.
        ''' </summary>
        ''' <remarks></remarks>
        Public GeldFuerEigenSchaden As Single = 0
        ''' <summary>
        ''' Wenn True dann kann man immer in Waelder und Riffe schauen.
        ''' </summary>
        ''' <remarks></remarks>
        Public RiffWaldSchauer As Boolean = False
        ''' <summary>
        ''' Wenn Einkommen groesser Fonds verliert man die Werte, wenn groesser gewinnt man sie fuer jede 10%
        ''' X=ATK Y=Kosten.
        ''' </summary>
        ''' <remarks></remarks>
        Public ATKundKostensteigererfuerFonds As Point = New Point(0, 0)
        ''' <summary>
        ''' Umso viel wird fuer jede Mine die Produktionskosten gesenkt.
        ''' </summary>
        ''' <remarks></remarks>
        Public Minenstaerke As Single = 0.05#
        ''' <summary>
        ''' Wenn ungleich 0 dann nimmt der Gegner Schaden wenn wir angegriffen wurden umso mehr Schaden wir erlitten haben.
        ''' </summary>
        ''' <remarks></remarks>
        Public ErhoehterGegenschadenbeiEigenSchaden As Single = 0
        ''' <summary>
        ''' Wenn true koennen die eigenen Truppen nur von Einheiten die gleich viel oder mehr gekostet haben Angegriffen werden.
        ''' </summary>
        ''' <remarks></remarks>
        Public KeinAngriffmitBilligerenTruppen As Boolean = False
        ''' <summary>
        ''' Wenn true dann haben wir maximales Glueck wenn der Gegner dadurch zerstoert wuerde.
        ''' </summary>
        ''' <remarks></remarks>
        Public MaxGlueckbeiZerstoerung As Boolean = False
        ''' <summary>
        ''' Je weniger TP umso schlechter kaempfen wir.
        ''' </summary>
        ''' <remarks></remarks>
        Public ZusaetlicheKampfschwaecheproTP As Integer = 0
        ''' <summary>
        ''' Wenn true hat man immer Maximales Glueck.
        ''' </summary>
        ''' <remarks></remarks>
        Public ImmerMaxGlueck As Boolean = False
        ''' <summary>
        ''' Umso viel steigt der Angriff bei Angriffen auf eine bestimmte Landschaft
        ''' </summary>
        ''' <remarks></remarks>
        Public AufLandschaftsStaerke As Integer = 0
        ''' <summary>
        ''' Die Landschaften auf die man schiessen muss.
        ''' </summary>
        ''' <remarks></remarks>
        Public AufLandschaftsUntergrund() As String = {}
        ''' <summary>
        ''' Wir richten immer so viel mehr Schaden aus.LOL.
        ''' </summary>
        ''' <remarks></remarks>
        Public FesterZusatzschadenUndDeffensive As New Point(0, 0)
        ''' <summary>
        ''' Der Spieler verdient so viel Geld mehr oder weniger.
        ''' </summary>
        ''' <remarks></remarks>
        Public MehrEinkommen As Single = 0
        ''' <summary>
        ''' Fuer jede Deckung unseres Gegner sind wir so viel staerker.
        ''' </summary>
        ''' <remarks></remarks>
        Public FeuerstaerkeproFeindlicherDeckung As Integer = 0
        ''' <summary>
        ''' Wenn die TP des Gegner kleiner sind als die eigenen kaempfen die Truppen besser.
        ''' </summary>
        ''' <remarks></remarks>
        Public ATKHochfuerSchwacheGegner As Single = 0
        ''' <summary>
        ''' Die Bewegungskosten auf diesen Feldern ist.
        ''' </summary>
        ''' <remarks></remarks>
        Public NeueBewegungskosten As Integer() = {}
        ''' <summary>
        ''' Auf dieser Landschaft sind die Bewegungskosten X
        ''' </summary>
        ''' <remarks></remarks>
        Public BewegungskostenUntergrund As String() = {}
        ''' <summary>
        ''' Wenn der Schaden groesser X ist fliegt die Einheit Y Felder weg.=) und nimmt dabei Schaden
        ''' </summary>
        ''' <remarks></remarks>
        Public Schadensflug As New Point(0, 0)
        ''' <summary>
        ''' Wenn unser Feind so wenig TP hat oder weniger dann wird er gelaehmt
        ''' </summary>
        ''' <remarks></remarks>
        Public Laehmschaden As Integer = -1
        ''' <summary>
        ''' Wenn unsere Einheit ueberlebt bekommen wir am Kampfende so viel TP zurueck wenn wir zerstoert werden nimmt unser Gegner so viel Schaden.
        ''' </summary>
        ''' <remarks></remarks>
        Public KampfSchadenHeilung As Integer = 0
        ''' <summary>
        ''' Wir erhalten eine Zusatzdeffensive Y und Zusatzoffensive X wenn wir einen Feind zerstoeren.
        ''' </summary>
        ''' <remarks></remarks>
        Public ATKDEFBoostdurchZerstoerung As New Point(0, 0)
        ''' <summary>
        ''' Eine zufaellige Einheit erhaelt Y Bewegungspunkte und X ATK Boost
        ''' </summary>
        ''' <remarks></remarks>
        Public AnyUnitKampfverstaerker As New Point(0, 0)
        ''' <summary>
        ''' Wenn ungleich Null erhaeht sich die ATK um den Wert und die Einheit kann noch mal ziehen.
        ''' </summary>
        ''' <remarks></remarks>
        Public NochMalZiehenUndKampfaenderNachZerstoerung As Integer = 0
        ''' <summary>
        ''' Wenn True erhalten Feinde keine Infos ueber die Gabeleiste
        ''' </summary>
        ''' <remarks></remarks>
        Public GabeleistenVerstecker As Boolean = False
        ''' <summary>
        ''' Wenn True machen wir einen Angriff wenn wir in eine Falle laufen.
        ''' </summary>
        ''' <remarks></remarks>
        Public FallenAngriff As Boolean = False
        ''' <summary>
        ''' Wenn True koennen Gegner keine Einsicht in die Fonds nehmen
        ''' </summary>
        ''' <remarks></remarks>
        Public KeineFondsInfos As Boolean = False
        ''' <summary>
        ''' Wenn True koennen angegriffene Truppen sich in der naechsten Runde nicht reparieren
        ''' </summary>
        ''' <remarks></remarks>
        Public ReperaturVerbotNachKampf As Boolean = False
        ''' <summary>
        ''' Wenn kleiner Null wird die Besetzungszahl eines Gebaeudes gesenkt, wenn eine Einheit drauf vernichtet wird.
        ''' </summary>
        ''' <remarks></remarks>
        Public BesetzungsbonusNachEinheitenZerstoerung As Integer = 0
        ''' <summary>
        ''' X Gibt an auf welchen Wert Wenn Y=1 dann Eigene, wenn Y=2 dann Feind bei Y=0 nichts
        ''' </summary>
        ''' <remarks></remarks>
        Public BewegungsKostenAenderungNachZerstoerung As Point = New Point(0, 0)
        ''' <summary>
        ''' Diese Einheiten kosten mehr oder weniger.
        ''' </summary>
        ''' <remarks></remarks>
        Public BonusEinheiten() As StringUndZahl = {}
        ''' <summary>
        ''' X=Staerke Y=Schaden fuer den jeweils Staerke verursacht wird.
        ''' </summary>
        ''' <remarks></remarks>
        Public RadioaktiveStaerke As Point = New Point(0, 0)
        ''' <summary>
        ''' Gibt zurueck wie viele Felder wir maximal Laufen koennen damit wir eine Feldtarnung erhalten
        ''' </summary>
        ''' <remarks></remarks>
        Public FeldtarnungsReichweite As Integer = -1
        ''' <summary>
        ''' Landschaften in der ersten Dimension bekommen die Bewegungskosten der Landschaft in der 2 Dimension.
        ''' Olaf Schnee in Ebene verwandeln.
        ''' </summary>
        ''' <remarks></remarks>
        Public LandschaftsVertauschung(,) As String = {}
        ''' <summary>
        ''' Nahkampf Einheiten erhalten einen Fernkampf. Ausser Bomber und Zeppelin
        ''' </summary>
        ''' <remarks></remarks>
        Public NahkampfReichweitenBonus As Integer = 0
        ''' <summary>
        ''' Welche Gebaeude unsere Truppen reparieren.
        ''' </summary>
        ''' <remarks></remarks>
        Public RepairON As ReperaturGebaeude = ReperaturGebaeude.Own
        ''' <summary>
        ''' Sagt auf jeden Gebaeude der KO bauen kann.
        ''' </summary>
        ''' <remarks></remarks>
        Public Baugebaeude As ReperaturGebaeude = ReperaturGebaeude.Own
        ''' <summary>
        ''' Wenn false verliert der KO keine Feuerkraft wenn die TP sinken.
        ''' </summary>
        ''' <remarks></remarks>
        Public FeuerVerlustbeiKP As Boolean = True
        ''' <summary>
        ''' Gebaeude Heilen und richten mehr Schaden an wenn groesser Null
        ''' </summary>
        ''' <remarks></remarks>
        Public GebaeudeZusatzSchaden As Integer = 0
        ''' <summary>
        ''' Wenn true werden alle Sprites zu Infis und der Schaden wird falsch angezeigt.
        ''' </summary>
        ''' <remarks></remarks>
        Public SpriteVertauschung As Boolean = False
        ''' <summary>
        ''' Bei diesem Wetter sind die Truppen ohne Auswirkung.
        ''' </summary>
        ''' <remarks></remarks>
        Public Wetterimmunitaet As ObjektSpielfeld.Wetterarten() = {}
        ''' <summary>
        ''' Units get Damage after they moved.
        ''' </summary>
        ''' <remarks></remarks>
        Public MoveDamage As Integer
        ''' <summary>
        ''' If a Unit takes more Damage than below, it can't move.
        ''' </summary>
        ''' <remarks></remarks>
        Public ParalyzeDamage As Integer = -1
        ''' <summary>
        ''' The more HP we loose the greater the Offence is.
        ''' </summary>
        ''' <remarks></remarks>
        Public HPLooseOffence As Integer
        ''' <summary>
        ''' Power Script for this CO
        ''' </summary>
        ''' <remarks></remarks>
        Public ThisPowerScript As PowerScript
        ''' <summary>
        ''' Die normale Bewegungsart
        ''' </summary>
        ''' <remarks></remarks>
        Public BewegungsartenVertauschungOrg As String() = {}
        ''' <summary>
        ''' Die neue Bewegungsart
        ''' </summary>
        ''' <remarks></remarks>
        Public BewegungsartenVertauschungNew As String() = {}
#End Region
        Public Sub New(ByRef Reader As IO.StreamReader)
            While Not Reader.EndOfStream
                Dim Z As String = Reader.ReadLine.Trim
                If Z.StartsWith("'") Then Continue While
                If Z.ToLower.StartsWith("powerende") Then
                    Exit While
                End If
                If Z.ToLower.StartsWith("bewegungsartenvertauschungorg:") Then
                    BewegungsartenVertauschungOrg = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungsartenvertauschungnew:") Then
                    BewegungsartenVertauschungNew = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("teurungsrate:") Then
                    Teurungsrate = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gebaeudeheilung:") Then
                    GebaeudeHeilung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("reichweite:") Then
                    Reichweite = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("besetzer:") Then
                    Besetzer = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("glueck:") Then
                    Glueck = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("pech:") Then
                    Pech = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bonusgeldprogebaeude:") Then
                    BonusGeldproGebaeude = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("spritsenkungluft:") Then
                    SpritsenkungLuft = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("Spritsenkungsee:") Then
                    SpritsenkungSee = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("landschaftsstaerke:") Then
                    LandschaftsStaerke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("landschaftsuntergrund:") Then
                    LandschaftsUntergrund = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("offensivstaerke:") Then
                    OffensivStaerke = LoadAngriffsTabelle(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"), Reader)
                    Continue While
                End If
                If Z.ToLower.StartsWith("deffensivstaerke:") Then
                    DeffensivStaerke = LoadAngriffsTabelle(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"), Reader)
                    Continue While
                End If
                If Z.ToLower.StartsWith("verstecker:") Then
                    Verstecker = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterbonus:") Then
                    Wetterbouns = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetter:") Then
                    Wetter = [Enum].Parse(ObjektSpielfeld.Wetterarten.Regen.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungssenker:") Then
                    Bewegunssenker = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungswetter:") Then
                    Bewegungswetter = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterreichweitenbonus:") Then
                    WetterReichweitenbonus = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterartfuersenker:") Then
                    WetterartfuerSenker = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("sendeturmstaerke:") Then
                    SendeTurmStaerke = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("zusatzdeffensive:") Then
                    Zusatzdeffensive = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabenfueller:") Then
                    Gabenfueller = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("geldraub:") Then
                    Geldraub = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("geldstaerke:") Then
                    Geldstaerke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("deckungsaenderung:") Then
                    DeckungsAenderung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("zusatzoffensive:") Then
                    Zusatzoffensive = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("moveandfire:") Then
                    MoveandFire = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("sichtbonus:") Then
                    Sichtbonus = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("doppelangriff:") Then
                    DoppelAngriff = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("keingegenschaden:") Then
                    KeinGegenSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("kampfbonus:") Then
                    Kampfbonus = [Enum].Parse(ObjektKO.Kampfboni.No.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("staerkebonusproeinheit:") Then
                    StaerkebonusproEinheit = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungsbonus:") Then
                    Bewegungsbonus = LoadBewegungsTabelle(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"), Reader)
                    Continue While
                End If
                If Z.ToLower.StartsWith("kampfverstaerker:") Then
                    Kampfverstaerker = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("fireandmove:") Then
                    FireandMove = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("maximalschaden:") Then
                    Maximalschaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gegenfeuerkraft:") Then
                    GegenFeuerkraft = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("lebensentzug:") Then
                    Lebensentzug = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("genaueslebenanzeigen:") Then
                    GenauesLebenAnzeigen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("nachbauziehen:") Then
                    NachBauZiehen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bergbonus:") Then
                    Bergbonus = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("gruppenboost:") Then
                    Dim S() As String = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    GruppenBoost = New Point() {CPoint(S(0)), CPoint(S(1))}
                    Continue While
                End If
                If Z.ToLower.StartsWith("riffwaldschauer:") Then
                    RiffWaldSchauer = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("geldfuereigenschaden:") Then
                    GeldFuerEigenSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("minenstaerke:") Then
                    Minenstaerke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("erhoehtergegenschadenbeieigenschaden:") Then
                    ErhoehterGegenschadenbeiEigenSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("atkdefboostdurchZerstoerung:") Then
                    ATKundKostensteigererfuerFonds = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("keinangriffmitbilligerentruppen:") Then
                    KeinAngriffmitBilligerenTruppen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("maxglueckbeizerstoerung:") Then
                    MaxGlueckbeiZerstoerung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("zusaetlichekampfschwaecheprotp:") Then
                    ZusaetlicheKampfschwaecheproTP = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("immermaxglueck:") Then
                    ImmerMaxGlueck = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("auflandschaftsstaerke:") Then
                    AufLandschaftsStaerke = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("auflandschaftsuntergrund:") Then
                    AufLandschaftsUntergrund = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("festerzusatzschadenunddeffensive:") Then
                    FesterZusatzschadenUndDeffensive = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("mehreinkommen:") Then
                    MehrEinkommen = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("feuerstaerkeprofeindlicherdeckung:") Then
                    FeuerstaerkeproFeindlicherDeckung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("atkhochfuerschwachegegner:") Then
                    ATKHochfuerSchwacheGegner = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("neuebewegungskosten:") Then
                    NeueBewegungskosten = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungskostenuntergrund:") Then
                    BewegungskostenUntergrund = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    Continue While
                End If
                If Z.ToLower.StartsWith("schadensflug:") Then
                    Schadensflug = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("laehmschaden:") Then
                    Laehmschaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("kampfschadenheilung:") Then
                    KampfSchadenHeilung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("atkdefboostdurchzerstoerung:") Then
                    ATKDEFBoostdurchZerstoerung = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("anyunitkampfverstaerker:") Then
                    AnyUnitKampfverstaerker = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("nochmalziehenundkampfaendernachzerstoerung:") Then
                    NochMalZiehenUndKampfaenderNachZerstoerung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gabeleistenverstecker:") Then
                    GabeleistenVerstecker = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("fallenangriff:") Then
                    FallenAngriff = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("keinefondsinfos:") Then
                    KeineFondsInfos = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("reperaturverbotnachkampf:") Then
                    ReperaturVerbotNachKampf = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("besetzungsbonusnacheinheitenzerstoerung:") Then
                    BesetzungsbonusNachEinheitenZerstoerung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("bewegungskostenaenderungnachzerstoerung:") Then
                    BewegungsKostenAenderungNachZerstoerung = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("bonuseinheiten:") Then
                    Dim S As String() = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    If S(0) <> "" And S.Length > 1 Then
                        Array.Resize(BonusEinheiten, S.Length)
                        For I = 0 To S.Length - 1
                            BonusEinheiten(I) = New ObjektKO.StringUndZahl(S(I).Split("_"))
                        Next
                    End If
                    Continue While
                End If
                If Z.ToLower.StartsWith("radioaktivestaerke:") Then
                    RadioaktiveStaerke = CPoint(Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("feldtarnungsreichweite:") Then
                    FeldtarnungsReichweite = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("landschaftsvertauschung:") Then
                    Dim S() As String = Z.Remove(0, Z.IndexOf(":") + 1).Split("|")
                    If S(0) <> "" And S.Length > 0 Then
                        ReDim LandschaftsVertauschung(S.Length - 1, 1)
                        For I = 0 To S.Length - 1
                            LandschaftsVertauschung(I, 0) = S(I).Split("_")(0)
                            LandschaftsVertauschung(I, 1) = S(I).Split("_")(1)
                        Next
                    End If
                    Continue While
                End If
                If Z.ToLower.StartsWith("nahkampfreichweitenbonus:") Then
                    NahkampfReichweitenBonus = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("repairon:") Then
                    RepairON = [Enum].Parse(ObjektKO.ReperaturGebaeude.Own.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("baugebaeude:") Then
                    Baugebaeude = [Enum].Parse(ObjektKO.ReperaturGebaeude.Own.GetType, Z.Remove(0, Z.IndexOf(":") + 1))
                    Continue While
                End If
                If Z.ToLower.StartsWith("feuerverlustbeikp:") Then
                    FeuerVerlustbeiKP = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("gebaeudezusatzschaden:") Then
                    GebaeudeZusatzSchaden = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("spritevertauschung:") Then
                    SpriteVertauschung = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("wetterimmunitaet:") Then
                    Wetterimmunitaet = ToIntArry(Z.Remove(0, Z.IndexOf(":") + 1).Split("|"))
                    Continue While
                End If
                If Z.ToLower.StartsWith("movedamage:") Then
                    MoveDamage = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("paralyzedamage:") Then
                    ParalyzeDamage = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("hplooseoffence:") Then
                    HPLooseOffence = Z.Remove(0, Z.IndexOf(":") + 1)
                    Continue While
                End If
                If Z.ToLower.StartsWith("scriptstart") Then
                    ThisPowerScript = New PowerScript(Reader)
                    Continue While
                End If
            End While
        End Sub
        Public Sub New()
        End Sub
        ''' <summary>
        ''' Aktiviert die KO-Power, der KO-Verweis bekommt also entsprechende Werte
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub ActivatePower(ByVal KO As ObjektKO)
            KO.BewegungsartenVertauschungNew = BewegungsartenVertauschungNew
            KO.BewegungsartenVertauschungOrg = BewegungsartenVertauschungOrg
            KO.Teurungsrate = Teurungsrate
            KO.GebaeudeHeilung = GebaeudeHeilung
            KO.Reichweite = Reichweite
            KO.Besetzer = Besetzer
            KO.Glueck = Glueck
            KO.Pech = Pech
            KO.BonusGeldproGebaeude = BonusGeldproGebaeude
            KO.SpritsenkungLuft = SpritsenkungLuft
            KO.SpritsenkungSee = SpritsenkungSee
            KO.LandschaftsStaerke = LandschaftsStaerke
            KO.LandschaftsUntergrund = LandschaftsUntergrund
            KO.OffensivStaerke = OffensivStaerke
            KO.DeffensivStaerke = DeffensivStaerke
            KO.Verstecker = Verstecker
            KO.Wetterbouns = Wetterbouns
            KO.Wetter = Wetter
            KO.Bewegunssenker = Bewegunssenker
            KO.Bewegungswetter = Bewegungswetter
            KO.WetterReichweitenbonus = WetterReichweitenbonus
            KO.WetterartfuerSenker = WetterartfuerSenker
            KO.SendeTurmStaerke = SendeTurmStaerke
            KO.Zusatzdeffensive = Zusatzdeffensive
            KO.Gabenfueller = Gabenfueller
            KO.Geldstaerke = Geldstaerke
            KO.Geldraub = Geldraub
            KO.Zusatzoffensive = Zusatzoffensive
            KO.DeckungsAenderung = DeckungsAenderung
            KO.KeinGegenSchaden = KeinGegenSchaden
            KO.DoppelAngriff = DoppelAngriff
            KO.Sichtbonus = Sichtbonus
            KO.MoveandFire = MoveandFire
            KO.Bewegungsbonus = Bewegungsbonus
            KO.Kampfbonus = Kampfbonus
            KO.StaerkebonusproEinheit = StaerkebonusproEinheit
            KO.Kampfverstaerker = Kampfverstaerker
            KO.FireandMove = FireandMove
            KO.Maximalschaden = Maximalschaden
            KO.GenauesLebenAnzeigen = GenauesLebenAnzeigen
            KO.GegenFeuerkraft = GegenFeuerkraft
            KO.Lebensentzug = Lebensentzug
            KO.NachBauZiehen = NachBauZiehen
            KO.Bergbonus = Bergbonus
            KO.GruppenBoost = GruppenBoost
            KO.RiffWaldSchauer = RiffWaldSchauer
            KO.GeldFuerEigenSchaden = GeldFuerEigenSchaden
            KO.ATKundKostensteigererfuerFonds = ATKundKostensteigererfuerFonds
            KO.Minenstaerke = Minenstaerke
            KO.ErhoehterGegenschadenbeiEigenSchaden = ErhoehterGegenschadenbeiEigenSchaden
            KO.ZusaetlicheKampfschwaecheproTP = ZusaetlicheKampfschwaecheproTP
            KO.MaxGlueckbeiZerstoerung = MaxGlueckbeiZerstoerung
            KO.KeinAngriffmitBilligerenTruppen = KeinAngriffmitBilligerenTruppen
            KO.ImmerMaxGlueck = ImmerMaxGlueck
            KO.AufLandschaftsStaerke = AufLandschaftsStaerke
            KO.AufLandschaftsUntergrund = AufLandschaftsUntergrund
            KO.FesterZusatzschadenUndDeffensive = FesterZusatzschadenUndDeffensive
            KO.MehrEinkommen = MehrEinkommen
            KO.FeuerstaerkeproFeindlicherDeckung = FeuerstaerkeproFeindlicherDeckung
            KO.ATKHochfuerSchwacheGegner = ATKHochfuerSchwacheGegner
            KO.NeueBewegungskosten = NeueBewegungskosten
            KO.BewegungskostenUntergrund = BewegungskostenUntergrund
            KO.KampfSchadenHeilung = KampfSchadenHeilung
            KO.Schadensflug = Schadensflug
            KO.Laehmschaden = Laehmschaden
            KO.AnyUnitKampfverstaerker = AnyUnitKampfverstaerker
            KO.ATKDEFBoostdurchZerstoerung = ATKDEFBoostdurchZerstoerung
            KO.NochMalZiehenUndKampfaenderNachZerstoerung = NochMalZiehenUndKampfaenderNachZerstoerung
            KO.KeineFondsInfos = KeineFondsInfos
            KO.FallenAngriff = FallenAngriff
            KO.GabeleistenVerstecker = GabeleistenVerstecker
            KO.BewegungsKostenAenderungNachZerstoerung = BewegungsKostenAenderungNachZerstoerung
            KO.ReperaturVerbotNachKampf = ReperaturVerbotNachKampf
            KO.BesetzungsbonusNachEinheitenZerstoerung = BesetzungsbonusNachEinheitenZerstoerung
            KO.BonusEinheiten = BonusEinheiten
            KO.RadioaktiveStaerke = RadioaktiveStaerke
            KO.FeldtarnungsReichweite = FeldtarnungsReichweite
            KO.LandschaftsVertauschung = LandschaftsVertauschung
            KO.NahkampfReichweitenBonus = NahkampfReichweitenBonus
            KO.FeuerVerlustbeiKP = FeuerVerlustbeiKP
            KO.Baugebaeude = Baugebaeude
            KO.RepairON = RepairON
            KO.GebaeudeZusatzSchaden = GebaeudeZusatzSchaden
            KO.SpriteVertauschung = SpriteVertauschung
            KO.Wetterimmunitaet = Wetterimmunitaet
            KO.ParalyzeDamage = ParalyzeDamage
            KO.MoveDamage = MoveDamage
            KO.HPLooseOffence = HPLooseOffence
        End Sub
        Public Sub ActivateEffect(ByVal KO As ObjektKO)
            If ThisPowerScript IsNot Nothing Then
                ThisPowerScript.Acivate(KO)
            End If
        End Sub
        Public Function LoadAngriffsTabelle(ByVal Z() As String, ByRef Reader As IO.StreamReader) As Angriffstabelle
            Select Case Z(0).ToLower
                Case "alles"
                    Return New FeuerkrafttabelleCustomAlles(Z(1))
                Case "seeluftboden"
                    Return New FeuerkrafttabelleCustomSeeOffLuftOff(Z(1), Z(2), Z(3))
                Case "fernkampf"
                    Return New FeuerkrafttabelleCustomFernkampf(Z(1), Z(2))
                Case "nahkampf"
                    Return New FeuerkrafttabelleCustomNahkampf(Z(1), Z(2), Z(3))
                Case "helis"
                    Return New FeuerkrafttabelleCustomHelis(Z(1), Z(2), Z(3), Z(4))
                Case "infantrie"
                    Return New FeuerkrafttabelleCustomINF(Z(1), Z(2), Z(3))
                Case "custom"
                    Return New AngriffstabelleCustom(Reader)
                Case "fernkampfsee"
                    Return New FeuerkrafttabelleCustomFernkampfSee(Z(1), Z(2))
                Case Else
                    If Z.Length > 1 Then
                        If IsNumeric(Z(1)) Then
                            Return New FeuerkrafttabelleCustomAlles(Z(1))
                        Else
                            Return New FeuerkrafttabelleCustomAlles(100)
                        End If
                    Else
                        If IsNumeric(Z(0)) Then
                            Return New FeuerkrafttabelleCustomAlles(Z(1))
                        Else
                            Return New FeuerkrafttabelleCustomAlles(100)
                        End If
                    End If
            End Select
        End Function
        Public Function LoadBewegungsTabelle(ByVal Z() As String, ByRef Reader As IO.StreamReader) As BewegungsboniTabelle
            Select Case Z(0).ToLower
                Case "alles"
                    Return New BewegungsboniTabelleCustomAlles(Z(1))
                Case "fernpanzer"
                    Return New BewegungsboniTabelleCustomFern_Panzer(Z(1))
                Case "hovercraft"
                    Return New BewegungsboniTabelleCustomHovercraft(Z(1))
                Case "inf"
                    Return New BewegungsboniTabelleCustomINF(Z(1))
                Case "see"
                    Return New BewegungsboniTabelleCustomSee(Z(1))
                Case "transport"
                    Return New BewegungsboniTabelleCustomTransporter(Z(1))
                Case "nahkampf"
                    Return New BewegungsboniTabelleCustomNahkampf(Z(1))
                Case "panzer"
                    Return New BewegungsboniTabelleCustomPanzer(Z(1))
                Case "luft"
                    Return New BewegungsboniTabelleCustomLuft(Z(1))
                Case "fernkampf"
                    Return New BewegungsboniTabelleCustomFernkampf(Z(1))
                Case "custom"
                    Return New BewegungsboniTabelleCustom(Reader)
                Case Else
                    Return New BewegungsboniTabelleCustomAlles(Z(1))
            End Select
        End Function
        Public Class PowerScript
            Public Effects As New List(Of Effect)
            Public Sub New()
            End Sub
            Public Sub New(ByVal StrR As IO.StreamReader)
                While Not StrR.EndOfStream
                    Dim S As String = StrR.ReadLine
                    If S.StartsWith("'") Then Continue While
                    If S.ToLower.StartsWith("scriptend") Then
                        Exit Sub
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.BesetzungsRestart.ToString.ToLower) Then
                        Effects.Add(New EffectCaptureRestart)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.HalbesEinkommen.ToString.ToLower) Then
                        Effects.Add(New EffectGetHalfIncome)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.EinheitenSchadensWelle.ToString.ToLower) Then
                        Dim Data() As String = S.Split(":")
                        Effects.Add(New EffectUnitDamageWave(Data(1), Data(2), Data(3)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.HalbesGeld.ToString.ToLower) Then
                        Effects.Add(New EffectGetHalfMoney)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeinEinkommen.ToString.ToLower) Then
                        Effects.Add(New EffectNoIncome)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.NeutralMachen.ToString.ToLower) Then
                        Effects.Add(New EffectMakeNeutral(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.NeutralesGeld.ToString.ToLower) Then
                        Effects.Add(New EffectGetNeutralMoney(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Massenschaden.ToString.ToLower) Then
                        Dim Data() As String = S.Split(":")
                        Effects.Add(New EffectMassDamage(Data(1), [Enum].Parse(EffectMassDamage.DamageUnit.Own.GetType, Data(2))))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.MassenschadenLaehmung.ToString.ToLower) Then
                        Dim Data() As String = S.Split(":")
                        Effects.Add(New EffectMassDamageMoveStop(Data(2), Data(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Gebaeudeerschaffen.ToString.ToLower) Then
                        Effects.Add(New EffectCreateBuilding(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.GebaeudeNochmalSchiessen.ToString.ToLower) Then
                        Effects.Add(New EffectFireAgain)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.StadtUebernehmen.ToString.ToLower) Then
                        Effects.Add(New EffectGetEnemyBuilding(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.gelderhoehen.ToString.ToLower) Then
                        Effects.Add(New EffectIncreaseOwnFonds(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Ration.ToString.ToLower) Then
                        Effects.Add(New EffectRation)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Wetteraendern.ToString.ToLower) Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectChangeWeather([Enum].Parse(ObjektSpielfeld.Wetterarten.Regen.GetType, Data(1)), Data(2)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Rakete.ToString.ToLower) Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectRocket(Data(1), Data(2), Data(3), [Enum].Parse(ObjektKO.Effekte.Keiner.GetType, Data(4)), Data(5)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.HeilenKOZone.ToString.ToLower) Then
                        Effects.Add(New EffectHealCORange(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.TreibMuniStehlen.ToString.ToLower) Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectStealAmmoFuel(Data(1), Data(2)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.NochmalZiehen.ToString.ToLower) Then
                        Effects.Add(New EffectMoveAgain)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.StadtBauen.ToString.ToLower) Then
                        Effects.Add(New EffectTownProduction)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.HoehereBewegungskosten.ToString.ToLower) Then
                        Effects.Add(New EffectIncreaseMovementCosts(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Zusatzangriffe.ToString.ToLower) Then
                        Effects.Add(New EffectDoubleAttack)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Schock.ToString.ToLower) Then
                        Effects.Add(New EffectShockEnemys(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Invasion.ToString.ToLower) Then
                        Effects.Add(New EffectInvasion(S.Split(":")(1).Split("_")))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeinTruppenbau.ToString.ToLower) Then
                        Effects.Add(New EffectNoProduction)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeineRation.ToString.ToLower) Then
                        Effects.Add(New EffectNoRation(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.AndereDeckung.ToString.ToLower) Then
                        Effects.Add(New EffectOtherDeffence(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Gabenraub.ToString.ToLower) Then
                        Effects.Add(New EffectStealPower(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Fallschrimspringer.ToString.ToLower) Then
                        Dim Data As String() = S.Split(":")
                        If Data.Length = 3 Then
                            Effects.Add(New EffectParatroopers(Data(1), Data(2), Data(3), "STADT"))
                        Else
                            Effects.Add(New EffectParatroopers(Data(1), Data(2), Data(3), Data(4)))
                        End If
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Besetzungsniedergang.ToString.ToLower) Then
                        Effects.Add(New EffectCaptureDown(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Geldheilung.ToString.ToLower) Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectMoneyhealing(Data(1), Data(2)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Lebensabrundung.ToString.ToLower) Then
                        Effects.Add(New EffectLifeDown)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeinTPSehungEigene.ToString.ToLower) Then
                        Effects.Add(New EffectNoOwnLifePoints)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeinTPSehungFeinde.ToString.ToLower) Then
                        Effects.Add(New EffectNoEnemyLifePoints)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeinAngriffausserInfanterie.ToString.ToLower) Then
                        Effects.Add(New EffectOnlyInfiAttack)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeinGabeeinsatz.ToString.ToLower) Then
                        Effects.Add(New EffectNoPower)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.ActivateKriegsnebel.ToString.ToLower) Then
                        Effects.Add(New EffectActiveFogOfWar(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.SetEnemyVisionRange.ToString.ToLower) Then
                        Effects.Add(New EffectSetEnemyVisionRange(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.SetEnemyLuckAndCurse.ToString.ToLower) Then
                        Dim Data As String() = S.Split(":")
                        Effects.Add(New EffectSetEnemyLuckandCurse(Data(1), Data(2)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.KeinGabeleisteAuffuellung.ToString.ToLower) Then
                        Effects.Add(New EffectNoPowerCharge)
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.WenigerEinahmendurchBesetzungszahl.ToString.ToLower) Then
                        Effects.Add(New EffectMoneyForCapturePoints(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.Geldeinnehmen.ToString.ToLower) Then
                        Effects.Add(New EffectEarnMoney(S.Split(":")(1)))
                    End If
                    If S.ToLower.StartsWith(KOCustom.KOScipts.GegnerKampf.ToString.ToLower) Then
                        Effects.Add(New EffectEarnMoney(S.Split(":")(1)))
                    End If
                End While
            End Sub
            Public Sub Acivate(ByVal KO As ObjektKO)
                For Each E In Effects
                    If E IsNot Nothing Then
                        E.Activate(KO)
                    End If
                Next
            End Sub
            Public Sub WritePowerScript(ByVal StrR As IO.StreamWriter)
                StrR.WriteLine("ScriptStart")
                For Each E In Effects
                    StrR.WriteLine(E.ToString())
                Next
                StrR.WriteLine("ScriptEnd")
            End Sub
            Public MustInherit Class Effect
                Implements ICloneable
                Public MustOverride Sub Activate(ByVal KO As ObjektKO)
                Public MustOverride Function ValueNumbers() As Integer

                Public Overridable Function Clone() As Object Implements System.ICloneable.Clone
                    If TypeOf Me Is EffectInvasion Then
                        Dim K As EffectInvasion = Me.Clone
                        Dim M As EffectInvasion = Me
                        ReDim K.Invasion(M.Invasion.Length - 1)
                        For I = 0 To K.Invasion.Length - 1
                            K.Invasion(I) = M.Invasion(I)
                        Next
                        Return K
                    Else
                        Return Me.Clone
                    End If
                End Function
            End Class
            Public Class EffectCaptureRestart
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.RestartBesetzungen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "BesetzungsRestart"
                End Function

                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectGetHalfMoney
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GetHalfMoney()
                End Sub
                Public Overrides Function ToString() As String
                    Return "HalbesEinkommen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoIncome
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Keineinkommen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinEinkommen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectMakeNeutral
                Inherits Effect
                Dim CapturePoints As Integer
                Public Sub New(ByVal CapturePoints As Integer)
                    Me.CapturePoints = CapturePoints
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.NeutraleBesetzungMachen(CapturePoints)
                End Sub
                Public Overrides Function ToString() As String
                    Return "NeutralMachen:" + CapturePoints.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectGetNeutralMoney
                Inherits Effect
                Dim Money As Integer
                Public Sub New(ByVal Money As Integer)
                    Me.Money = Money
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GetNeutralesGeld(Money)
                End Sub
                Public Overrides Function ToString() As String
                    Return "NeutralesGeld:" + Money.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectMassDamage
                Inherits Effect
                Public Enum DamageUnit
                    Own
                    OwnBuildings
                    TownDamage
                    AllEnemies
                    Nature
                    Bombs
                    Sea_Bombs
                    Air_Rockets
                    Ground_Bombs
                End Enum
                Dim Damage As Integer
                Dim DamageUnits As DamageUnit
                Public Sub New(ByVal Damage As Integer, ByVal DamageUnits As DamageUnit)
                    Me.Damage = Damage
                    Me.DamageUnits = DamageUnits
                End Sub

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    Select Case DamageUnits
                        Case DamageUnit.Own
                            KO.EigeneEinheitenHeilen(Damage)
                        Case DamageUnit.OwnBuildings
                            KO.HealBuildings(Damage)
                        Case DamageUnit.TownDamage
                            KO.Stadtschaden(Damage)
                        Case DamageUnit.AllEnemies
                            KO.AlleFeindeBeschaedigen(Damage)
                        Case DamageUnit.Nature
                            If Damage > 0 Then
                                KO.NaturGift(Damage)
                            Else
                                KO.NaturHeilung(-Damage)
                            End If
                        Case DamageUnit.Bombs
                            KO.Bombenregen(Damage)
                        Case DamageUnit.Sea_Bombs
                            KO.AlleSeeFeindeBeschaedigen(Damage)
                        Case DamageUnit.Air_Rockets
                            KO.AlleLuftFeindeBeschaedigen(Damage)
                        Case DamageUnit.Ground_Bombs
                            KO.AlleBodenFeindeBeschaedigen(Damage)
                    End Select
                End Sub
                Public Overrides Function ToString() As String
                    Return "Massenschaden:" + Damage.ToString + ":" + DamageUnits.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectCreateBuilding
                Inherits Effect
                Dim Building As String
                Public Sub New(ByVal Building As String)
                    Me.Building = Building
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.CreateGebaeude(Building)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Gebaeudeerschaffen:" + Building
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectFireAgain
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GebaeudeNochmalSchiessen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "GebaeudeNochmalSchiessen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectGetEnemyBuilding
                Inherits Effect
                Dim Number As Integer
                Public Sub New(ByVal Number As Integer)
                    Me.Number = Number
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.StadtUebernehmen(Number)
                End Sub
                Public Overrides Function ToString() As String
                    Return "StadtUebernehmen:" + Number.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectIncreaseOwnFonds
                Inherits Effect
                Dim Increase As Single
                Public Sub New(ByVal Increase As Single)
                    Me.Increase = Increase
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    Objektverwalter.Spielfeld.AktuellerSpieler.AddFonds(Objektverwalter.Spielfeld.AktuellerSpieler.Fonds * Increase)
                End Sub
                Public Overrides Function ToString() As String
                    Return "gelderhoehen:" + Increase.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectRation
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.VollRation()
                End Sub
                Public Overrides Function ToString() As String
                    Return "Ration"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectChangeWeather
                Inherits Effect
                Dim Weather As ObjektSpielfeld.Wetterarten
                Dim Time As Integer
                Public Sub New(ByVal Weather As ObjektSpielfeld.Wetterarten, ByVal Time As Integer)
                    Me.Weather = Weather
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.WetterAendern(Weather, Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Wetteraendern:" + Weather.ToString + ":" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectRocket
                Inherits Effect
                Dim Damage As Integer
                Dim AnimationType As String
                Dim Range As Integer
                Dim Effect As ObjektKO.Effekte
                Dim Buffertime As Integer
                Dim TargetMode As Integer = 0
                Public Sub New(ByVal Damage As Integer, ByVal AnimationType As String, ByVal Range As Integer, ByVal Effect As ObjektKO.Effekte, ByVal Buffertime As Integer, Optional ByVal TargetMode As Integer = 0)
                    Me.Damage = Damage
                    Me.AnimationType = AnimationType
                    Me.Range = Range
                    Me.Effect = Effect
                    Me.Buffertime = Buffertime
                    Me.TargetMode = TargetMode
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Rakete(Damage, AnimationType, Range, Effect, Buffertime, TargetMode)
                End Sub
                Public Overrides Function ToString() As String
                    If String.IsNullOrEmpty(AnimationType) Then AnimationType = ""
                    Return "Rakete:" + Damage.ToString + ":" + AnimationType + ":" + Range.ToString + ":" + Effect.ToString + ":" + Buffertime.ToString + ":" + TargetMode.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 6
                End Function
            End Class
            Public Class EffectHealCORange
                Inherits Effect
                Dim Heal As Integer
                Public Sub New(ByVal Heal As Integer)
                    Me.Heal = Heal
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    Select Case DataSettings.CommanderWarsGameModus
                        Case CommanderWarsGameModi.AdvanceWarsDC, CommanderWarsGameModi.CommanderWars2
                            Dim E As ObjektEinheit = Objektverwalter.Spielfeld.Spieler(KO.Spieler).KOS(0).GetKOUnit
                            Dim WZeit As Integer = 4
                            If Not E Is Nothing Then
                                'Caulder heilt sich
                                Objektverwalter.ZuFeldgehen(E.X, E.Y)
                                Dim R As Integer = KO.GetKORange()
                                Dim Kreis As Integer(,) = Kreisfunktion(KO.GetKORange)
                                For X = 0 To Kreis.GetLength(0) - 1
                                    For Y = 0 To Kreis.GetLength(1) - 1
                                        If Kreis(X, Y) >= 0 Then
                                            If Objektverwalter.Spielfeld.OnMap(E.X - R + X, E.Y - R + Y) Then
                                                Dim E2 As ObjektEinheit = Objektverwalter.Spielfeld.Einheiten(E.X - R + X, E.Y - R + Y, E.GetMap)
                                                If Not E2 Is Nothing Then
                                                    If E2.Spieler = KO.Spieler Then
                                                        'Sie wird geheilt!
                                                        BackbufferSpiel.AddAnimation("ANDYGABE", WZeit, New Point(E.X - R + X, E.Y - R + Y), True, E.GetMap)
                                                        WZeit += 4

                                                        E2.DoDamage(-Heal)
                                                    End If
                                                End If
                                            End If
                                        End If
                                    Next
                                Next
                            End If
                        Case Else
                            Dim WZeit As Integer = 4
                            For Each Einheit In Objektverwalter.Spielfeld.Einheiten
                                If Not Einheit Is Nothing Then
                                    If Einheit.Spieler = KO.Spieler Then
                                        BackbufferSpiel.AddAnimation("ANDYGABE", WZeit, New Point(Einheit.X, Einheit.Y), True, Einheit.GetMap)
                                        WZeit += 4
                                        Einheit.DoDamage(-Heal / 2)
                                    End If
                                End If
                            Next
                    End Select
                End Sub
                Public Overrides Function ToString() As String
                    Return "HeilenKOZone:" + Heal.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectStealAmmoFuel
                Inherits Effect
                Dim Ammo As Boolean
                Dim Fuel As Boolean
                Public Sub New(ByVal Ammo As Boolean, ByVal Fuel As Boolean)
                    Me.Ammo = Ammo
                    Me.Fuel = Fuel
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.MuniTreibrauben(Ammo, Fuel)
                End Sub
                Public Overrides Function ToString() As String
                    Return "TreibMuniStehlen:" + Ammo.ToString + ":" + Fuel.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectMoveAgain
                Inherits Effect

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.NochmalZiehen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "NochmalZiehen"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectGetHalfIncome
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.GetHalfIncome()
                End Sub
                Public Overrides Function ToString() As String
                    Return "HalbesGeld"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectMassDamageMoveStop
                Inherits Effect
                Dim Damage As Integer
                Dim MoveStopLife As Integer
                Public Sub New(ByVal Damage As Integer, ByVal MoveStopLife As Integer)
                    Me.Damage = Damage
                    Me.MoveStopLife = MoveStopLife
                End Sub

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Laehmungsschaden(Damage, MoveStopLife)
                End Sub
                Public Overrides Function ToString() As String
                    Return "MassenschadenLaehmung:" + Damage.ToString + ":" + MoveStopLife.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectTownProduction
                Inherits Effect

                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Stadtbauen()
                End Sub
                Public Overrides Function ToString() As String
                    Return "StadtBauen"
                End Function

                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectIncreaseMovementCosts
                Inherits Effect
                Dim Increasment As Integer
                Public Sub New(ByVal Increasment As Integer)
                    Me.Increasment = Increasment
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.HoehereBewegungskosten(Increasment)
                End Sub
                Public Overrides Function ToString() As String
                    Return "HoehereBewegungskosten:" + Increasment.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectDoubleAttack
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Zusatzangriffe()
                End Sub
                Public Overrides Function ToString() As String
                    Return "Zusatzangriffe"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectShockEnemys
                Inherits Effect
                Dim Percent As Integer
                Public Sub New(ByVal Percent As Integer)
                    Me.Percent = Percent
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    If Percent > 0 Then
                        KO.SchockEnemys(Percent)
                    Else
                        KO.Schock()
                    End If
                End Sub
                Public Overrides Function ToString() As String
                    Return "Schock:" + Percent.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectInvasion
                Inherits Effect
                Public Invasion As String()
                Public Sub New(ByVal Invasion As String())
                    Me.Invasion = Invasion
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Invasion(Invasion)
                End Sub
                Public Overrides Function ToString() As String
                    Dim S As String = ""
                    If Invasion IsNot Nothing Then
                        For I = 0 To Invasion.Length - 1
                            If I = Invasion.Length - 1 Then
                                S += Invasion(I)
                            Else
                                S += Invasion(I) + ":"

                            End If
                        Next
                    End If
                    Return "Invasion:" + S
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectNoProduction
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeineTruppenBau()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinTruppenbau"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoRation
                Inherits Effect
                Dim Time As Integer
                Public Sub New(ByVal Time As Integer)
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeineVersorgung(Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeineRation:" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectOtherDeffence
                Inherits Effect
                Dim NewDeffence As Integer
                Public Sub New(ByVal NewDeffence As Integer)
                    Me.NewDeffence = NewDeffence
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.AndereDeckung(NewDeffence)
                End Sub
                Public Overrides Function ToString() As String
                    Return "AndereDeckung:" + NewDeffence.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectStealPower
                Inherits Effect
                Dim Fonds As Integer
                Public Sub New(ByVal Fonds As Integer)
                    Me.Fonds = Fonds
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Gabenraub(Fonds)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Gabenraub:" + Fonds.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectParatroopers
                Inherits Effect
                Dim Unit As String
                Dim LifePoints As Integer
                Dim Animation As String
                Dim GebaeudeID As String
                Public Sub New(ByVal Unit As String, ByVal LifePoints As Integer, ByVal Animation As String, ByVal GebaeudeID As String)
                    Me.Unit = Unit
                    Me.LifePoints = LifePoints
                    Me.Animation = Animation
                    Me.GebaeudeID = GebaeudeID
                    If GebaeudeID = "" Then GebaeudeID = "STADT"
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Fallschrimspringer(Unit, LifePoints, Animation.ToUpper, GebaeudeID.ToUpper)
                End Sub
                Public Overrides Function ToString() As String
                    If String.IsNullOrEmpty(Unit) Then Unit = ""
                    If String.IsNullOrEmpty(Animation) Then Animation = ""
                    Return "Fallschrimspringer:" + Unit.ToString + ":" + LifePoints.ToString + ":" + Animation + ":" + GebaeudeID
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 4
                End Function
            End Class
            Public Class EffectCaptureDown
                Inherits Effect
                Dim CapturePoints As Integer
                Public Sub New(ByVal CapturePoints As Integer)
                    Me.CapturePoints = CapturePoints
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Besetzungsniedergang(CapturePoints)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Besetzungsniedergang:" + CapturePoints.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectMoneyhealing
                Inherits Effect
                Dim KampfverstaerkungfuermehrHeilung As Integer
                Dim Heal As Integer
                Public Sub New(ByVal KampfverstaerkungfuermehrHeilung As Integer, ByVal Heal As Integer)
                    Me.KampfverstaerkungfuermehrHeilung = KampfverstaerkungfuermehrHeilung
                    Me.Heal = Heal
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Geldheilung(Heal, KampfverstaerkungfuermehrHeilung)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Geldheilung:" + KampfverstaerkungfuermehrHeilung.ToString + ":" + Heal.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectLifeDown
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.Lebensabrundung()
                End Sub
                Public Overrides Function ToString() As String
                    Return "Lebensabrundung"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoOwnLifePoints
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinTPSehungEigene()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinTPSehungEigene"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoEnemyLifePoints
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinTPSehungEigene()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinTPSehungFeinde"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectOnlyInfiAttack
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinAngriffAusserInfanterie()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinAngriffausserInfanterie"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectNoPower
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinGabeEinsatz()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinGabeeinsatz"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectActiveFogOfWar
                Inherits Effect
                Dim Time As Integer
                Public Sub New(ByVal Time As Integer)
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.ActivateKriegsnebel(Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "ActivateKriegsnebel:" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectSetEnemyVisionRange
                Inherits Effect
                Dim Time As Integer
                Public Sub New(ByVal Time As Integer)
                    Me.Time = Time
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.SetEnemyVisionRange(Time)
                End Sub
                Public Overrides Function ToString() As String
                    Return "SetEnemyVisionRange:" + Time.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectSetEnemyLuckandCurse
                Inherits Effect
                Dim Luck As Integer
                Dim Curse As Integer
                Public Sub New(ByVal Luck As Integer, ByVal AntiLuck As Integer)
                    Me.Luck = Luck
                    Me.Curse = Curse
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.SetEnemyLuckandCurse(Luck, Curse)
                End Sub
                Public Overrides Function ToString() As String
                    Return "SetEnemyLuckAndCurse:" + Luck.ToString + ":" + Curse.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 2
                End Function
            End Class
            Public Class EffectNoPowerCharge
                Inherits Effect
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.KeinGabeleisteAuffuellung()
                End Sub
                Public Overrides Function ToString() As String
                    Return "KeinGabeleisteAuffuellung"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Class EffectMoneyForCapturePoints
                Inherits Effect
                Dim CapturePoints As Single
                Public Sub New(ByVal CapturePoints As Single)
                    Me.CapturePoints = CapturePoints
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.WenigerEinahmendurchBesetzungszahl(CapturePoints)
                End Sub
                Public Overrides Function ToString() As String
                    Return "WenigerEinahmendurchBesetzungszahl:" + CapturePoints.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectUnitDamageWave
                Inherits Effect
                Dim Damage As Integer
                Dim Range As Integer
                Dim Mode As ObjektKO.UnitDamageModeWave
                Public Sub New(ByVal Damage As Integer, ByVal Range As Integer, ByVal Mode As ObjektKO.UnitDamageModeWave)
                    Me.Damage = Damage
                    Me.Range = Range
                    Me.Mode = Mode
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.UnitDamageWave(Damage, Range, Mode)
                End Sub
                Public Overrides Function ToString() As String
                    Return "EinheitenSchadensWelle:" + Damage.ToString + ":" + Range.ToString + ":" + CInt(Mode).ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectEarnMoney
                Inherits Effect
                Dim Money As Integer
                Public Sub New(ByVal Money As Single)
                    Me.Money = Money
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.EarnMoney(Money)
                End Sub
                Public Overrides Function ToString() As String
                    Return "Geldeinnehmen:" + Money.ToString
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 1
                End Function
            End Class
            Public Class EffectEnemyBattle
                Inherits Effect
                Public Sub New()
                End Sub
                Public Overrides Sub Activate(ByVal KO As ObjektKO)
                    KO.EnemyBattle()
                End Sub
                Public Overrides Function ToString() As String
                    Return "GegnerKampf"
                End Function
                Public Overrides Function ValueNumbers() As Integer
                    Return 0
                End Function
            End Class
            Public Shared Function GetEffect(ByVal EffectName As String, ByVal Value1 As Object, ByVal Value2 As Object, ByVal Value3 As Object, ByVal Value4 As Object, ByVal Value5 As Object, ByVal Value6 As Object) As Effect
                EffectName = Sprachconverter.TranslateIntoGerman(EffectName)
                Select Case EffectName
                    Case "GegnerKampf", "Enemy Battle"
                        Return New EffectEnemyBattle
                    Case "Geldeinnehmen", "Earn Money"
                        Return New EffectEarnMoney(Value1)
                    Case "Capture Restart", "BesetzungsRestart"
                        Return New EffectCaptureRestart
                    Case "Get Half Income", "HalbesGeld"
                        Return New EffectGetHalfIncome
                    Case "Get Half Money", "HalbesEinkommen"
                        Return New EffectGetHalfMoney
                    Case "No Income", "KeinEinkommen"
                        Return New EffectNoIncome
                    Case "Make Neutral", "NeutralMachen"
                        Return New EffectMakeNeutral(Value1)
                    Case "Get Neutral Money", "NeutralesGeld"
                        Return New EffectGetNeutralMoney(Value1)
                    Case "Mass Damage", "Massenschaden"
                        Return New EffectMassDamage(Value1, Value2)
                    Case "Mass Damage Move Stop", "MassenschadenLaehmung"
                        Return New EffectMassDamageMoveStop(Value1, Value2)
                    Case "Create Building", "Gebaeudeerschaffen"
                        Return New EffectCreateBuilding(Value1)
                    Case "Fire Again", "GebaeudeNochmalSchiessen"
                        Return New EffectFireAgain
                    Case "Get Enemy Building", "StadtUebernehmen"
                        Return New EffectGetEnemyBuilding(Value1)
                    Case "Increase Own Fonds", "gelderhoehen"
                        Return New EffectIncreaseOwnFonds(Value1)
                    Case "Ration", "Ration"
                        Return New EffectRation
                    Case "Change Weather", "Wetteraendern"
                        Return New EffectChangeWeather(Value1, Value2)
                    Case "Rocket", "Rakete"
                        Return New EffectRocket(Value1, Value2, Value3, Value4, Value5, Value6)
                    Case "Heal CO Range", "HeilenKOZone"
                        Return New EffectHealCORange(Value1)
                    Case "Steal Ammo Fuel", "TreibMuniStehlen"
                        Return New EffectStealAmmoFuel(Value1, Value2)
                    Case "Move Again", "NochmalZiehen"
                        Return New EffectMoveAgain
                    Case "Town Production", "StadtBauen"
                        Return New EffectTownProduction
                    Case "Increase Movement Costs", "HoehereBewegungskosten"
                        Return New EffectIncreaseMovementCosts(Value1)
                    Case "Double Attack", "Zusatzangriffe"
                        Return New EffectDoubleAttack
                    Case "Shock Enemys", "Schock"
                        Return New EffectShockEnemys(Value1)
                    Case "Invasion", "Invasion"
                        Return New EffectInvasion(Value1)
                    Case "NoProduction", "KeinTruppenbau"
                        Return New EffectNoProduction
                    Case "No Ration", "KeineRation"
                        Return New EffectNoRation(Value1)
                    Case "Other Deffence", "AndereDeckung"
                        Return New EffectOtherDeffence(Value1)
                    Case "Steal Power", "Gabenraub"
                        Return New EffectStealPower(Value1)
                    Case "Paratroopers", "Fallschrimspringer"
                        Return New EffectParatroopers(Value1, Value2, Value3, Value4)
                    Case "Capture Down", "Besetzungsniedergang"
                        Return New EffectCaptureDown(Value1)
                    Case "Moneyhealing", "Geldheilung"
                        Return New EffectMoneyhealing(Value1, Value2)
                    Case "Life Down", "Lebensabrundung"
                        Return New EffectLifeDown
                    Case "No Own Life Points", "KeinTPSehungEigene"
                        Return New EffectNoOwnLifePoints
                    Case "No Enemy Life Points", "KeinTPSehungFeinde"
                        Return New EffectNoEnemyLifePoints
                    Case "Only Infantry Attack", "KeinAngriffausserInfanterie"
                        Return New EffectOnlyInfiAttack
                    Case "No Power", "KeinGabeeinsatz"
                        Return New EffectNoPower
                    Case "Active Fog Of War", "ActivateKriegsnebel"
                        Return New EffectActiveFogOfWar(Value1)
                    Case "Set Enemy Vision Range", "SetEnemyVisionRange"
                        Return New EffectSetEnemyVisionRange(Value1)
                    Case "Set Enemy Luck and Curse", "SetEnemyLuckAndCurse"
                        Return New EffectSetEnemyLuckandCurse(Value1, Value2)
                    Case "No Power Charge", "KeinGabeleisteAuffuellung"
                        Return New EffectNoPowerCharge
                    Case "Money For Capture Points", "WenigerEinahmendurchBesetzungszahl"
                        Return New EffectMoneyForCapturePoints(Value1)
                    Case "No Production"
                        Return New EffectNoProduction
                    Case "Unit Damage Wave", "EinheitenSchadensWelle"
                        Return New EffectUnitDamageWave(Value1, Value2, Value3)
                    Case Else
                        Return Nothing
                End Select
            End Function

        End Class
        Public Sub WritePower(ByVal StrR As IO.StreamWriter)
            StrR.WriteLine("Teurungsrate:" + Teurungsrate.ToString)
            StrR.WriteLine("Gebaeudeheilung:" + GebaeudeHeilung.ToString)
            StrR.WriteLine("Reichweite:" + Reichweite.ToString)
            StrR.WriteLine("Besetzer:" + Besetzer.ToString)
            StrR.WriteLine("Glueck:" + Glueck.ToString)
            StrR.WriteLine("Pech:" + Pech.ToString)
            StrR.WriteLine("BonusGeldproGebaeude:" + BonusGeldproGebaeude.ToString)
            StrR.WriteLine("SpritsenkungLuft:" + SpritsenkungLuft.ToString)
            StrR.WriteLine("SpritsenkungSee:" + SpritsenkungSee.ToString)
            StrR.WriteLine("LandschaftsStaerke:" + LandschaftsStaerke.ToString)
            StrR.WriteLine("LandschaftsUntergrund:" + ToSTR(LandschaftsUntergrund))
            If TypeOf OffensivStaerke Is AngriffstabelleCustom Then
                StrR.WriteLine("Offensivstaerke:Custom")
                CType(OffensivStaerke, AngriffstabelleCustom).Write(StrR)
            Else
                If OffensivStaerke Is Nothing Then
                    StrR.WriteLine("Offensivstaerke:Alles|100")
                Else
                    StrR.WriteLine("Offensivstaerke:" + OffensivStaerke.ToString)
                End If

            End If
            If TypeOf DeffensivStaerke Is AngriffstabelleCustom Then
                StrR.WriteLine("Deffensivstaerke:Custom")
                CType(DeffensivStaerke, AngriffstabelleCustom).Write(StrR)
            Else
                If DeffensivStaerke Is Nothing Then
                    StrR.WriteLine("Deffensivstaerke:Alles|100")
                Else
                    StrR.WriteLine("Deffensivstaerke:" + DeffensivStaerke.ToString)
                End If
            End If
            StrR.WriteLine("Verstecker:" + Verstecker.ToString)
            StrR.WriteLine("WetterBonus:" + Wetterbouns.ToString)
            StrR.WriteLine("Wetter:" + Wetter.ToString)
            StrR.WriteLine("Bewegungssenker:" + ToSTR(Bewegunssenker))
            StrR.WriteLine("BewegungsWetter:" + ToSTR(Bewegungswetter))
            StrR.WriteLine("WetterReichweitenbonus:" + ToSTR(WetterReichweitenbonus))
            StrR.WriteLine("WetterartFuerSenker:" + ToSTR(WetterartfuerSenker))
            StrR.WriteLine("Sendeturmstaerke:" + SendeTurmStaerke.ToString)
            StrR.WriteLine("Zusatzdeffensive:" + Zusatzdeffensive.ToString)
            StrR.WriteLine("Gabenfueller:" + Gabenfueller.ToString)
            StrR.WriteLine("Geldraub:" + Geldraub.ToString)
            StrR.WriteLine("Geldstaerke:" + Geldstaerke.ToString)
            StrR.WriteLine("Deckungsaenderung:" + DeckungsAenderung.ToString)
            StrR.WriteLine("Zusatzoffensive:" + Zusatzoffensive.ToString)
            StrR.WriteLine("MoveAndFire:" + MoveandFire.ToString)
            StrR.WriteLine("Sichtbonus:" + Sichtbonus.ToString)
            StrR.WriteLine("DoppelAngriff:" + DoppelAngriff.ToString)
            StrR.WriteLine("KeinGegenSchaden:" + KeinGegenSchaden.ToString)
            StrR.WriteLine("Kampfbonus:" + Kampfbonus.ToString)
            StrR.WriteLine("StaerkebonusProEinheit:" + StaerkebonusproEinheit.ToString)
            If Bewegungsbonus IsNot Nothing Then
                If TypeOf Bewegungsbonus Is BewegungsboniTabelleCustom Then
                    StrR.WriteLine("Bewegungsbonus:Custom")
                    CType(Bewegungsbonus, BewegungsboniTabelleCustom).Write(StrR)
                Else
                    StrR.WriteLine("Bewegungsbonus:" + Bewegungsbonus.ToString)
                End If
            End If
            StrR.WriteLine("Kampfverstaerker:" + Kampfverstaerker.ToString)
            StrR.WriteLine("FireAndMove:" + FireandMove.ToString)
            StrR.WriteLine("Maximalschaden:" + Maximalschaden.ToString)
            StrR.WriteLine("GegenFeuerkraft:" + GegenFeuerkraft.ToString)
            StrR.WriteLine("Lebensentzug:" + Lebensentzug.ToString)
            StrR.WriteLine("GenauesLebenAnzeigen:" + GenauesLebenAnzeigen.ToString)
            StrR.WriteLine("NachBauZiehen:" + NachBauZiehen.ToString)
            StrR.WriteLine("Bergbonus:" + Bergbonus.ToString)
            StrR.WriteLine("Gruppenboost:" + GruppenBoost(0).ToString + "|" + GruppenBoost(1).ToString)
            StrR.WriteLine("RiffWaldSchauer:" + RiffWaldSchauer.ToString)
            StrR.WriteLine("GeldFuerEigenschaden:" + GeldFuerEigenSchaden.ToString)
            StrR.WriteLine("Minenstaerke:" + Minenstaerke.ToString)
            StrR.WriteLine("ErhoehtergegenschadenbeieigenSchaden:" + ErhoehterGegenschadenbeiEigenSchaden.ToString)
            StrR.WriteLine("ATKDEFBoostdurchZerstoerung:" + ATKundKostensteigererfuerFonds.ToString)
            StrR.WriteLine("KeinAngriffmitBilligerenTruppen:" + KeinAngriffmitBilligerenTruppen.ToString)
            StrR.WriteLine("MaxglueckbeiZerstoerung:" + MaxGlueckbeiZerstoerung.ToString)
            StrR.WriteLine("ZusaetlicheKampfschwaecheproTP:" + ZusaetlicheKampfschwaecheproTP.ToString)
            StrR.WriteLine("ImmerMaxGlueck:" + ImmerMaxGlueck.ToString)
            StrR.WriteLine("AuflandschaftsStaerke:" + AufLandschaftsStaerke.ToString)
            StrR.WriteLine("auflandschaftsuntergrund:" + ToSTR(AufLandschaftsUntergrund))
            StrR.WriteLine("FesterZusatzschadenUndDeffensive:" + FesterZusatzschadenUndDeffensive.ToString)
            StrR.WriteLine("MehrEinkommen:" + MehrEinkommen.ToString)
            StrR.WriteLine("FeuerstaerkeproFeindlicherDeckung:" + FeuerstaerkeproFeindlicherDeckung.ToString)
            StrR.WriteLine("ATKHochfuerSchwacheGegner:" + ATKHochfuerSchwacheGegner.ToString)
            StrR.WriteLine("NeueBewegungskosten:" + ToSTR(NeueBewegungskosten))
            StrR.WriteLine("BewegungskostenUntergrund:" + ToSTR(BewegungskostenUntergrund))
            StrR.WriteLine("Schadensflug:" + Schadensflug.ToString)
            StrR.WriteLine("Laehmschaden:" + Laehmschaden.ToString)
            StrR.WriteLine("KampfSchadenHeilung:" + KampfSchadenHeilung.ToString)
            StrR.WriteLine("ATKDEFBoostdurchZerstoerung:" + ATKDEFBoostdurchZerstoerung.ToString)
            StrR.WriteLine("AnyUnitKampfverstaerker:" + AnyUnitKampfverstaerker.ToString)
            StrR.WriteLine("NochMalZiehenUndKampfaenderNachZerstoerung:" + NochMalZiehenUndKampfaenderNachZerstoerung.ToString)
            StrR.WriteLine("GabeleistenVerstecker:" + GabeleistenVerstecker.ToString)
            StrR.WriteLine("FallenAngriff:" + FallenAngriff.ToString)
            StrR.WriteLine("KeineFondsInfos:" + KeineFondsInfos.ToString)
            StrR.WriteLine("ReperaturVerbotNachKampf:" + ReperaturVerbotNachKampf.ToString)
            StrR.WriteLine("BesetzungsbonusNachEinheitenZerstoerung:" + BesetzungsbonusNachEinheitenZerstoerung.ToString)
            StrR.WriteLine("BewegungsKostenAenderungNachZerstoerung:" + BewegungsKostenAenderungNachZerstoerung.ToString)
            Dim S As String = ""
            For I = 0 To BonusEinheiten.Length - 1
                If I = BonusEinheiten.Length - 1 Then
                    S += BonusEinheiten(I).ToString
                Else
                    S += BonusEinheiten(I).ToString + "|"
                End If
            Next

            StrR.WriteLine("BonusEinheiten:" + S)
            StrR.WriteLine("radioaktivestaerke:" + RadioaktiveStaerke.ToString)
            StrR.WriteLine("feldtarnungsreichweite:" + FeldtarnungsReichweite.ToString)
            S = ""
            For I = 0 To LandschaftsVertauschung.GetLength(0) - 1
                If I = LandschaftsVertauschung.GetLength(0) - 1 Then
                    S += LandschaftsVertauschung(I, 0) + "_" + LandschaftsVertauschung(I, 1)
                Else
                    S += LandschaftsVertauschung(I, 0) + "_" + LandschaftsVertauschung(I, 1) + "|"
                End If
            Next
            StrR.WriteLine("LandschaftsVertauschung:" + S)
            StrR.WriteLine("NahkampfReichweitenBonus:" + NahkampfReichweitenBonus.ToString)
            StrR.WriteLine("RepairON:" + RepairON.ToString)
            StrR.WriteLine("Baugebaeude:" + Baugebaeude.ToString)
            StrR.WriteLine("FeuerVerlustbeiKP:" + FeuerVerlustbeiKP.ToString)
            StrR.WriteLine("GebaeudeZusatzSchaden:" + GebaeudeZusatzSchaden.ToString)
            StrR.WriteLine("SpriteVertauschung:" + SpriteVertauschung.ToString)
            StrR.WriteLine("Wetterimmunitaet:" + ToSTR(Wetterimmunitaet))
            StrR.WriteLine("ParalyzeDamage:" + ParalyzeDamage.ToString)
            StrR.WriteLine("MoveDamage:" + MoveDamage.ToString)
            StrR.WriteLine("HPLooseOffence:" + HPLooseOffence.ToString)
            StrR.WriteLine("BewegungsartenVertauschungOrg:" + ToSTR(BewegungsartenVertauschungOrg))
            StrR.WriteLine("BewegungsartenVertauschungNew:" + ToSTR(BewegungsartenVertauschungNew))
            If ThisPowerScript IsNot Nothing Then
                ThisPowerScript.WritePowerScript(StrR)
            End If
            StrR.WriteLine("PowerEnde")
        End Sub
    End Class
End Class
Public Class KOBeschreibungCustom
    Inherits ObjektKOBeschreibung
    Public Sub New()
        Name = "Custom CO"
        Fein = "Custom"
        Nein = "Nothing Custom"
        Beschreibung = New String() {"A custom CO."}
        Stil = New String() {"Don't know the way he was created."}
        Gabebeschreibung = New String() {"Something custom."}
        SpezialgabeBeschreibung = New String() {"I don't know."}
        GabeKosten = 3
        Spezialgabekosten = 3
        Gaben = New String() {"Custom 1", "Custom 2"}
        Synergie = New Decimal() {}
        KONamen = New String() {}
        Doppelgabenamen = New String() {}
        Gabesaetze = New String() {"Don't know say something"}
        Siegsaetze = New String() {"You win with a Custom CO boring."}
        Tauschsaetze = New String() {"Beware i'm Custom."}
        Doppelgabesaetze = New DoppelGabesatz() {}
        Niederlagesaetze = New String() {"I simply loose!", _
                                    "I told you this Custom CO is a looser!"}
    End Sub
End Class
Public Class KOClone
    Inherits ObjektKO
    Dim KO As ObjektKO
    Public KOBild As String
    Public Sub New(ByVal Spieler As Integer, ByVal KOID As Integer, ByVal KOBild As String)
        MyBase.New(Spieler, KIGabeEinsatzstellen.RundenAnfang)
        KO = ObjektLadeklasse.NewKO(Objektverwalter.GetKO(KOID).KOID, Spieler)
        Laden(Spieler, KOID, KOBild)
    End Sub
    Public Sub New(ByVal Spieler As Integer, ByVal Gabefuellstand As Integer, ByVal Gabenart As Gabemodi, ByVal neuSternkosten As Integer, ByVal KOBild As String, ByVal KOID As String)
        MyBase.New(Spieler, Gabefuellstand, Gabenart, neuSternkosten, KIGabeEinsatzstellen.RundenAnfang)
        KO = ObjektLadeklasse.NewKO(KOID, Spieler, Gabefuellstand, Gabenart, neuSternkosten)
        Laden(Spieler, KO.Bild, KOBild)
    End Sub


    Public Sub Laden(ByVal Spieler As Integer, ByVal KOID As Integer, ByVal KOBild As String)
        CopyKO()
        Me.KOID = "CLONE" + KO.KOID
        Me.KOBild = KOBild

        Me.Bild = Objektverwalter.GetKOLength() - 1
        Objektverwalter.AddKO(New Objektverwalter.KO(KOBild, Me.KOID, KO.Armee, New KOBeschreibungCustom))
        Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOBeschreibung.SetAllInfoToDOT()
        Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOBeschreibung.Name = Objektverwalter.GetKO(KOID).KOBeschreibung.Name
        Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOBeschreibung.Gabebeschreibung = Objektverwalter.GetKO(KOID).KOBeschreibung.Gabebeschreibung
        Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOBeschreibung.SpezialgabeBeschreibung = Objektverwalter.GetKO(KOID).KOBeschreibung.SpezialgabeBeschreibung
        Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOBeschreibung.Gaben = Objektverwalter.GetKO(KOID).KOBeschreibung.Gaben
        Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOBeschreibung.GabeKosten = Objektverwalter.GetKO(KOID).KOBeschreibung.GabeKosten
        Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOBeschreibung.Spezialgabekosten = Objektverwalter.GetKO(KOID).KOBeschreibung.Spezialgabekosten
        If Objektverwalter.GetKO(Objektverwalter.GetKOLength() - 1).KOTexture Is Nothing Then
            Objektverwalter.SetKOTexture(Objektverwalter.GetKO(KOID).KOTexture, Objektverwalter.GetKOLength() - 1)
        End If
    End Sub

    Public Overrides Sub Gabeeinsetzen(Optional ByVal OhneFunktion As Boolean = False)
        KO.Gabeeinsetzen()
        CopyKO()
    End Sub

    Public Overrides Sub KOFrame()
        KO.KOFrame()
        CopyKO()
    End Sub

    Public Overrides Sub KOLaden()
        KO.KOLaden()
        CopyKO()
    End Sub

    Public Overrides Sub SpezialGabeeinsetzen(Optional ByVal OhneFunktion As Boolean = False)
        KO.SpezialGabeeinsetzen()
        CopyKO()
    End Sub

    Private Sub CopyKO()
        Me.Gaben = KO.Gaben
        Me.KOname = KO.KOname
        Me.Armee = KO.Armee
        Me.Musik = KO.Musik
        Me.Gabemusik = KO.Gabemusik
        Me.Spezialgabemusik = KO.Spezialgabemusik
        Me.Doppelgabemusik = KO.Doppelgabemusik
        Me.Sternkosten = KO.Sternkosten
        Me.Gabekosten = KO.Gabekosten
        Me.SpezialgabeKosten = KO.SpezialgabeKosten
        Me.GabeEinsatzstelle = KO.GabeEinsatzstelle
        Me.BewegungsartenVertauschungNew = KO.BewegungsartenVertauschungNew
        Me.BewegungsartenVertauschungOrg = KO.BewegungsartenVertauschungOrg
        Me.Teurungsrate = KO.Teurungsrate
        Me.GebaeudeHeilung = KO.GebaeudeHeilung
        Me.Reichweite = KO.Reichweite
        Me.Besetzer = KO.Besetzer
        Me.Glueck = KO.Glueck
        Me.Pech = KO.Pech
        Me.BonusGeldproGebaeude = KO.BonusGeldproGebaeude
        Me.SpritsenkungLuft = KO.SpritsenkungLuft
        Me.SpritsenkungSee = KO.SpritsenkungSee
        Me.LandschaftsStaerke = KO.LandschaftsStaerke
        Me.LandschaftsUntergrund = KO.LandschaftsUntergrund
        Me.OffensivStaerke = KO.OffensivStaerke
        Me.DeffensivStaerke = KO.DeffensivStaerke
        Me.Verstecker = KO.Verstecker
        Me.Wetterbouns = KO.Wetterbouns
        Me.Wetter = KO.Wetter
        Me.Bewegunssenker = KO.Bewegunssenker
        Me.Bewegungswetter = KO.Bewegungswetter
        Me.WetterReichweitenbonus = KO.WetterReichweitenbonus
        Me.WetterartfuerSenker = KO.WetterartfuerSenker
        Me.SendeTurmStaerke = KO.SendeTurmStaerke
        Me.Zusatzdeffensive = KO.Zusatzdeffensive
        Me.Gabenfueller = KO.Gabenfueller
        Me.Geldstaerke = KO.Geldstaerke
        Me.Geldraub = KO.Geldraub
        Me.Zusatzoffensive = KO.Zusatzoffensive
        Me.DeckungsAenderung = KO.DeckungsAenderung
        Me.KeinGegenSchaden = KO.KeinGegenSchaden
        Me.DoppelAngriff = KO.DoppelAngriff
        Me.Sichtbonus = KO.Sichtbonus
        Me.MoveandFire = KO.MoveandFire
        Me.Bewegungsbonus = KO.Bewegungsbonus
        Me.Kampfbonus = KO.Kampfbonus
        Me.StaerkebonusproEinheit = KO.StaerkebonusproEinheit
        Me.Kampfverstaerker = KO.Kampfverstaerker
        Me.FireandMove = KO.FireandMove
        Me.Maximalschaden = KO.Maximalschaden
        Me.GenauesLebenAnzeigen = KO.GenauesLebenAnzeigen
        Me.GegenFeuerkraft = KO.GegenFeuerkraft
        Me.Lebensentzug = KO.Lebensentzug
        Me.NachBauZiehen = KO.NachBauZiehen
        Me.Bergbonus = KO.Bergbonus
        Me.GruppenBoost = KO.GruppenBoost
        Me.RiffWaldSchauer = KO.RiffWaldSchauer
        Me.GeldFuerEigenSchaden = KO.GeldFuerEigenSchaden
        Me.ATKundKostensteigererfuerFonds = KO.ATKundKostensteigererfuerFonds
        Me.Minenstaerke = KO.Minenstaerke
        Me.ErhoehterGegenschadenbeiEigenSchaden = KO.ErhoehterGegenschadenbeiEigenSchaden
        Me.ZusaetlicheKampfschwaecheproTP = KO.ZusaetlicheKampfschwaecheproTP
        Me.MaxGlueckbeiZerstoerung = KO.MaxGlueckbeiZerstoerung
        Me.KeinAngriffmitBilligerenTruppen = KO.KeinAngriffmitBilligerenTruppen
        Me.ImmerMaxGlueck = KO.ImmerMaxGlueck
        Me.AufLandschaftsStaerke = KO.AufLandschaftsStaerke
        Me.AufLandschaftsUntergrund = KO.AufLandschaftsUntergrund
        Me.FesterZusatzschadenUndDeffensive = KO.FesterZusatzschadenUndDeffensive
        Me.MehrEinkommen = KO.MehrEinkommen
        Me.FeuerstaerkeproFeindlicherDeckung = KO.FeuerstaerkeproFeindlicherDeckung
        Me.ATKHochfuerSchwacheGegner = KO.ATKHochfuerSchwacheGegner
        Me.NeueBewegungskosten = KO.NeueBewegungskosten
        Me.BewegungskostenUntergrund = KO.BewegungskostenUntergrund
        Me.KampfSchadenHeilung = KO.KampfSchadenHeilung
        Me.Schadensflug = KO.Schadensflug
        Me.Laehmschaden = KO.Laehmschaden
        Me.AnyUnitKampfverstaerker = KO.AnyUnitKampfverstaerker
        Me.ATKDEFBoostdurchZerstoerung = KO.ATKDEFBoostdurchZerstoerung
        Me.NochMalZiehenUndKampfaenderNachZerstoerung = KO.NochMalZiehenUndKampfaenderNachZerstoerung
        Me.KeineFondsInfos = KO.KeineFondsInfos
        Me.FallenAngriff = KO.FallenAngriff
        Me.GabeleistenVerstecker = KO.GabeleistenVerstecker
        Me.BewegungsKostenAenderungNachZerstoerung = KO.BewegungsKostenAenderungNachZerstoerung
        Me.ReperaturVerbotNachKampf = KO.ReperaturVerbotNachKampf
        Me.BesetzungsbonusNachEinheitenZerstoerung = KO.BesetzungsbonusNachEinheitenZerstoerung
        Me.BonusEinheiten = KO.BonusEinheiten
        Me.RadioaktiveStaerke = KO.RadioaktiveStaerke
        Me.FeldtarnungsReichweite = KO.FeldtarnungsReichweite
        Me.LandschaftsVertauschung = KO.LandschaftsVertauschung
        Me.NahkampfReichweitenBonus = KO.NahkampfReichweitenBonus
        Me.FeuerVerlustbeiKP = KO.FeuerVerlustbeiKP
        Me.Baugebaeude = KO.Baugebaeude
        Me.RepairON = KO.RepairON
        Me.GebaeudeZusatzSchaden = KO.GebaeudeZusatzSchaden
        Me.SpriteVertauschung = KO.SpriteVertauschung
        Me.Wetterimmunitaet = KO.Wetterimmunitaet
        Me.ParalyzeDamage = KO.ParalyzeDamage
        Me.MoveDamage = KO.MoveDamage
        Me.HPLooseOffence = KO.HPLooseOffence
    End Sub
End Class